题目
Given two integers a
and b
, which can be positive or negative, find the sum of all the numbers between including them too and return it. If the two numbers are equal return a
or b
.
Note: a
and b
are not ordered!
Examples
1 | get_sum(1, 0) == 1 // 1 + 0 = 1 |
答案
我的答案
1 | def get_sum(a,b): |
最佳答案
1 | def get_sum(a,b): |
明显地,我的答案比较直接,没有考虑使用较为“高级”的方法。
知识点
sum
sum()
方法对系列进行求和计算。
语法
sum(iterable[, start])
- iterable – 可迭代对象,如列表。
- start – 指定相加的参数,如果没有设置这个值,默认为0。
示例
1 | 0,1,2]) sum([ |
range和xrange
在最佳答案中还有另外一种:1
2def get_sum(a,b):
return sum(range(min(a, b), max(a, b) + 1))
与之前的区别在于这里使用了range()函数
。
xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。
语法
range(start, stop[, step])
start
: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);end
: 计数到 end 结束,但不包括 end。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step
:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
示例
xrange()
和range()
这两个基本上都是在循环的时候用。1
2
3
4
5for i in range(0, 100):
print i
for i in xrange(0, 100):
print i
这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:1
2
3
4
5
6
7
8
9
100,10) a = range(
print type(a)
<type 'list'>
print a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print a[0], a[1]
0 1
0, 10, 2) a = range(
print a
[0, 2, 4, 6, 8]
而xrange则不会直接生成一个list,而是每次调用返回其中的一个值1
2
3
4
5
6
70,10) a = xrange(
print type(a)
<type 'xrange'>
print a
xrange(10)
print a[0], a[1]
0 1
所以xrange做循环的性能比range好,尤其是返回很大的时候!尽量用xrange吧,除非你是要返回一个列表。
注意点
前提是你使用的是Python2
,因为在Python3
中range()
是像xrange()
那样实现以至于一个专门的xrange()
函数都不再存在,xrange()
会抛出命名异常。1
2
3
40,10) a = xrange(
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined
另外,在Python3
中,range()
函数也不再返回一个list。1
2
3
4
50, 10) a = range(
print(type(a))
<class 'range'>
>>> print(type(a))
<class 'range'>